# security encryption file-transfer noise-protocol critical-fix
**CRITICAL SECURITY VULNERABILITY FIXED: Private File Transfers Now Properly Noise Encrypted**

**Problem**: Audio messages, images, and files sent in private chats were being sent as unencrypted FILE_TRANSFER packets, exposing private file content to the entire mesh network.

**Root Cause**: The sendFilePrivate() method in BluetoothMeshService.kt was creating FILE_TRANSFER packets with the raw TLV payload, not encrypting them through the Noise protocol like text messages.

**Security Impact**: 
- Private images were visible to all mesh participants
- Private voice recordings were audible to all mesh participants  
- Private file contents were readable by all mesh participants
- Only the filename/metadata was somewhat obscured by TLV encoding

**Fix Applied**:

1. **Updated NoisePayloadType enum** (NoiseEncrypted.kt):
   - Added FILE_TRANSFER(0x04u) payload type for encrypted file transfers

2. **Fixed sendFilePrivate()** (BluetoothMeshService.kt):
   - Now wraps file TLV in NoisePayload with FILE_TRANSFER type
   - Encrypts through encryptionService.encrypt() like text messages
   - Sends as NOISE_ENCRYPTED packet (not FILE_TRANSFER packet)
   - Requires established Noise session; initiates handshake if missing
   - Maintains same fragmentation and progress tracking

3. **Enhanced handleNoiseEncrypted()** (MessageHandler.kt):
   - Added NoisePayloadType.FILE_TRANSFER case
   - Decrypts file payload and processes like unencrypted files
   - Maintains same MIME-based classification (image/audio/file)
   - Sends delivery ACK for encrypted file transfers

**Technical Details**:
- **Broadcast files**: Still unencrypted FILE_TRANSFER (public by design)
- **Private files**: Now encrypted via NOISE_ENCRYPTED with FILE_TRANSFER NoisePayload
- **Backward compatibility**: Mixed mesh will work (new private sends encrypted, old broadcast path unchanged)
- **iOS compatibility**: Uses same NoisePayload system as iOS implementation

**Files Modified**:
- app/src/main/java/com/bitchat/android/model/NoiseEncrypted.kt - Added FILE_TRANSFER payload type
- app/src/main/java/com/bitchat/android/mesh/BluetoothMeshService.kt - Fixed sendFilePrivate() encryption
- app/src/main/java/com/bitchat/android/mesh/MessageHandler.kt - Added encrypted file receive handling

**Build Status**: ✅ Successful compilation

**Result**: Private file transfers (images, audio, generic files) are now properly end-to-end encrypted and only visible to the intended recipient, matching the security model of private text messages.

